package com.joker.demo.admin.service;

import com.joker.demo.admin.domain.dto.ThreadPoolMonitorQueryDTO;
import com.joker.demo.admin.domain.dto.ExecutorStatisticsQueryDTO;
import com.joker.demo.admin.domain.po.ThreadPoolMonitorPO;
import com.joker.demo.admin.domain.vo.PageResult;
import com.joker.demo.admin.domain.vo.ExecutorStatisticsVO;

import java.util.List;

/**
 * 线程池监控服务接口
 *
 * @author : feixiang.li
 * @since : 2025-01-27 10:00
 */
public interface ThreadPoolMonitorService {

    /**
     * 保存监控数据
     *
     * @param monitorData 监控数据
     */
    void saveMonitorData(ThreadPoolMonitorPO monitorData);

    /**
     * 分页查询监控数据
     *
     * @param queryDTO 查询条件
     * @return 分页结果
     */
    PageResult<ThreadPoolMonitorPO> queryMonitorData(ThreadPoolMonitorQueryDTO queryDTO);

    /**
     * 查询最新的监控数据
     *
     * @param registerKey 执行器标识
     * @param limit       限制数量
     * @return 监控数据列表
     */
    List<ThreadPoolMonitorPO> queryLatestMonitorData(String registerKey, Integer limit);

    /**
     * 查询所有执行器的最新监控数据
     *
     * @return 监控数据列表
     */
    List<ThreadPoolMonitorPO> queryAllLatestMonitorData();

    /**
     * 查询24小时内所有执行器的汇总监控数据
     *
     * @return 汇总监控数据列表
     */
    List<ThreadPoolMonitorPO> query24HourSummaryData();

    /**
     * 查询指定执行器24小时内的汇总监控数据
     *
     * @param registerKey 执行器标识
     * @return 汇总监控数据
     */
    ThreadPoolMonitorPO query24HourSummaryDataByRegisterKey(String registerKey);

    /**
     * 查询监控统计信息
     *
     * @param registerKey 执行器标识
     * @param startTime   开始时间
     * @param endTime     结束时间
     * @return 统计结果
     */
    ThreadPoolMonitorPO queryMonitorStatistics(String registerKey, String startTime, String endTime);

    /**
     * 清理历史数据
     *
     * @param days 保留天数
     */
    void cleanHistoryData(Integer days);

    /**
     * 查询执行器统计信息
     *
     * @param queryDTO 查询条件
     * @return 统计结果
     */
    ExecutorStatisticsVO queryExecutorStatistics(ExecutorStatisticsQueryDTO queryDTO);
}
